﻿
namespace caedisi.Web.DataModel
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Objects.DataClasses;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;
    
    
    // The MetadataTypeAttribute identifies CellMetadata as the class
    // that carries additional metadata for the Cell class.
    [MetadataTypeAttribute(typeof(Cell.CellMetadata))]
    public partial class Cell
    {
        
        // This class allows you to attach custom attributes to properties
        // of the Cell class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class CellMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private CellMetadata()
            {
            }
            
            public Nullable<Guid> BottomCellId { get; set; }
            
            public Nullable<Guid> BottomLeftCellId { get; set; }
            
            public Nullable<Guid> BottomRightCellId { get; set; }
            
            public Guid CellId { get; set; }
            
            public CellStateType CellStateType { get; set; }
            
            public int CellStateTypeId { get; set; }
            
            public CellularAutomata CellularAutomata { get; set; }
            
            public int CellularAutomataId { get; set; }
            
            public string Description { get; set; }
            
            public string Label { get; set; }
            
            public Nullable<Guid> LeftCellId { get; set; }
            
            public Nullable<Guid> RightCellId { get; set; }
            
            public Nullable<Guid> TopCellId { get; set; }
            
            public Nullable<Guid> TopLeftCellId { get; set; }
            
            public Nullable<Guid> TopRightCellId { get; set; }
            
            public int x { get; set; }
            
            public int y { get; set; }
            
            public int z { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies CellStateTypeMetadata as the class
    // that carries additional metadata for the CellStateType class.
    [MetadataTypeAttribute(typeof(CellStateType.CellStateTypeMetadata))]
    public partial class CellStateType
    {
        
        // This class allows you to attach custom attributes to properties
        // of the CellStateType class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class CellStateTypeMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private CellStateTypeMetadata()
            {
            }
            
            public string AliasCharacter { get; set; }
            
            public EntityCollection<Cell> Cells { get; set; }
            
            public int CellStateTypeId { get; set; }
            
            public string Color { get; set; }
            
            public string Description { get; set; }
            
            public bool IsSystemState { get; set; }
            
            public string Name { get; set; }
            
            public EntityCollection<NeighbourhoodStateConfiguration> NeighbourhoodStateConfigurations { get; set; }
            
            public EntityCollection<TransitionRule> TransitionRules { get; set; }
            
            public EntityCollection<TransitionRule> TransitionRules1 { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies CellularAutomataMetadata as the class
    // that carries additional metadata for the CellularAutomata class.
    [MetadataTypeAttribute(typeof(CellularAutomata.CellularAutomataMetadata))]
    public partial class CellularAutomata
    {
        
        // This class allows you to attach custom attributes to properties
        // of the CellularAutomata class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class CellularAutomataMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private CellularAutomataMetadata()
            {
            }
            
            [Include]
            public EntityCollection<Cell> Cells { get; set; }
            
            public int CellularAutomataId { get; set; }
            
            public bool CircularHorizontal { get; set; }
            
            public bool CircularVertical { get; set; }
            
            public string Description { get; set; }
            
            public short Height { get; set; }
            
            public int ImmunityTime { get; set; }
            
            public string Name { get; set; }
            
            public NeighbourhoodType NeighbourhoodType { get; set; }
            
            public int NeighbourhoodTypeId { get; set; }
            
            public int RadiusContamination { get; set; }
            
            public int RadiusVisibility { get; set; }

            [Include]
            public EntityCollection<TransitionRule> TransitionRules { get; set; }
            
            public string Url { get; set; }
            
            public short Width { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies ConfigurationMetadata as the class
    // that carries additional metadata for the Configuration class.
    [MetadataTypeAttribute(typeof(Configuration.ConfigurationMetadata))]
    public partial class Configuration
    {
        
        // This class allows you to attach custom attributes to properties
        // of the Configuration class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class ConfigurationMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private ConfigurationMetadata()
            {
            }
            
            public int ConfigurationId { get; set; }
            
            public string Description { get; set; }
            
            public string key { get; set; }
            
            public string Value { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies NeighbourhoodStateConfigurationMetadata as the class
    // that carries additional metadata for the NeighbourhoodStateConfiguration class.
    [MetadataTypeAttribute(typeof(NeighbourhoodStateConfiguration.NeighbourhoodStateConfigurationMetadata))]
    public partial class NeighbourhoodStateConfiguration
    {
        
        // This class allows you to attach custom attributes to properties
        // of the NeighbourhoodStateConfiguration class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class NeighbourhoodStateConfigurationMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private NeighbourhoodStateConfigurationMetadata()
            {
            }
            
            public CellStateType CellStateType { get; set; }
            
            public int CellStateTypeId { get; set; }
            
            public int NeighbourhoodStateConfigurationId { get; set; }
            
            public TransitionRule TransitionRule { get; set; }
            
            public int TransitionRuleId { get; set; }
            
            public int x_offset { get; set; }
            
            public int y_offset { get; set; }
            
            public int z_offset { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies NeighbourhoodTypeMetadata as the class
    // that carries additional metadata for the NeighbourhoodType class.
    [MetadataTypeAttribute(typeof(NeighbourhoodType.NeighbourhoodTypeMetadata))]
    public partial class NeighbourhoodType
    {
        
        // This class allows you to attach custom attributes to properties
        // of the NeighbourhoodType class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class NeighbourhoodTypeMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private NeighbourhoodTypeMetadata()
            {
            }
            
            public EntityCollection<CellularAutomata> CellularAutomatas { get; set; }
            
            public string Description { get; set; }
            
            public bool IsBottomLeftON { get; set; }
            
            public bool IsBottomON { get; set; }
            
            public bool IsBottomRightON { get; set; }
            
            public bool IsLeftON { get; set; }
            
            public bool IsRightON { get; set; }
            
            public bool IsTopLeftON { get; set; }
            
            public bool IsTopON { get; set; }
            
            public bool IsTopRightON { get; set; }
            
            public string Name { get; set; }
            
            public int NeighbourhoodTypeId { get; set; }
            
            public string Url { get; set; }
        }
    }
    
    // The MetadataTypeAttribute identifies TransitionRuleMetadata as the class
    // that carries additional metadata for the TransitionRule class.
    [MetadataTypeAttribute(typeof(TransitionRule.TransitionRuleMetadata))]
    public partial class TransitionRule
    {
        
        // This class allows you to attach custom attributes to properties
        // of the TransitionRule class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TransitionRuleMetadata
        {
            
            // Metadata classes are not meant to be instantiated.
            private TransitionRuleMetadata()
            {
            }
            
            public CellStateType CellStateType { get; set; }
            
            public CellStateType CellStateType1 { get; set; }
            
            public CellularAutomata CellularAutomata { get; set; }
            
            public int CellularAutomataId { get; set; }
            
            public int CurrentCellStateTypeId { get; set; }
            
            public string Description { get; set; }
            
            public bool IsSystemGenerated { get; set; }
            
            public string Name { get; set; }

            [Include]
            public EntityCollection<NeighbourhoodStateConfiguration> NeighbourhoodStateConfigurations { get; set; }
            
            public int ResultCellStateTypeId { get; set; }
            
            public int TransitionRuleId { get; set; }
            
            public string Url { get; set; }
        }
    }
}
